home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.internal;
-
- import com.ibm.xml.framework.ContentModel;
- import com.ibm.xml.framework.ContentSpecNode;
- import com.ibm.xml.framework.ElementDeclPool;
- import com.ibm.xml.framework.InsertableElementsInfo;
-
- class MixedContentModel implements ContentModel {
- private int fCount = 0;
- private int[] fChildren;
-
- public MixedContentModel(ElementDeclPool var1, int var2) throws CMException {
- int var3 = 64;
- int[] var4 = new int[var3];
- ContentSpecNode var5 = new ContentSpecNode();
-
- while(true) {
- try {
- this.fCount = this.buildContentList(var1.getContentSpec(var2), var4, 0, var5, var1);
- break;
- } catch (IndexOutOfBoundsException var7) {
- var3 *= 2;
- var4 = new int[var3];
- this.fCount = 0;
- }
- }
-
- this.fChildren = new int[this.fCount];
-
- for(int var6 = 0; var6 < this.fCount; ++var6) {
- this.fChildren[var6] = var4[var6];
- }
-
- }
-
- public int validateContent(int var1, int[] var2) throws Exception {
- for(int var3 = 0; var3 < var1; ++var3) {
- int var4 = var2[var3];
- if (var4 != -1) {
- int var5;
- for(var5 = 0; var5 < this.fCount && var4 != this.fChildren[var5]; ++var5) {
- }
-
- if (var5 == this.fCount) {
- return var3;
- }
- }
- }
-
- return -1;
- }
-
- public int whatCanGoHere(boolean var1, InsertableElementsInfo var2) throws Exception {
- for(int var3 = var2.insertAt; var3 < var2.childCount; ++var3) {
- var2.curChildren[var3] = var2.curChildren[var3 + 1];
- }
-
- --var2.childCount;
- int var4 = this.validateContent(var2.childCount, var2.curChildren);
- if (var4 != -1 && var4 < var2.insertAt) {
- return var4;
- } else {
- var2.canHoldPCData = true;
- var2.isValidEOC = true;
- var2.resultsCount = this.fCount;
- if (var2.results == null || var2.results.length < var2.resultsCount) {
- var2.results = new boolean[var2.resultsCount];
- }
-
- if (var2.possibleChildren == null || var2.possibleChildren.length < var2.resultsCount) {
- var2.possibleChildren = new int[var2.resultsCount];
- }
-
- boolean var5 = true;
- if (var1 && var4 < var2.childCount) {
- var5 = false;
- }
-
- for(int var6 = 0; var6 < this.fCount; ++var6) {
- var2.possibleChildren[var6] = this.fChildren[var6];
- var2.results[var6] = var5;
- }
-
- return -1;
- }
- }
-
- private final int buildContentList(int var1, int[] var2, int var3, ContentSpecNode var4, ElementDeclPool var5) throws CMException {
- var5.getContentSpecNode(var1, var4);
- if (var4.type == 0) {
- var2[var3++] = var4.value;
- return var3;
- } else {
- int var6 = var4.value;
- int var7 = var4.otherValue;
- if (var4.type != 4 && var4.type != 5) {
- if (var4.type != 1 && var4.type != 2 && var4.type != 3) {
- throw new CMException(152);
- }
-
- var3 = this.buildContentList(var6, var2, var3, var4, var5);
- } else {
- var3 = this.buildContentList(var6, var2, var3, var4, var5);
- var3 = this.buildContentList(var7, var2, var3, var4, var5);
- }
-
- return var3;
- }
- }
- }
-